package cn.dlc.com.server;

import java.util.List;

import org.I0Itec.zkclient.IZkChildListener;
import org.I0Itec.zkclient.ZkClient;
import org.I0Itec.zkclient.ZkConnection;

public class XietiaoServer {

	private ZkClient zkClient;
	
	private List<String> serviceList;
	
	// 创建对象的时候创建连接
	public XietiaoServer(String zkUrl,String nodePath) {
		// 创建连接
		zkClient = new ZkClient(new ZkConnection(zkUrl));
		
		// 如果节点不存在，就创建一个持久化的节点，
		if(!zkClient.exists(nodePath)) {
			// 创建这个节点
			zkClient.createPersistent(nodePath);
		}
	}
	/**
	 * 注册一个临时节点，当创建这个临时节点的应用
	 * 与zookeeper之间的会话过期之后就会被zookeeper自动删除了！
	 * @param nodePath
	 * @param serverName
	 * @param content
	 */
	public void registServer(String nodePath,String serverName,String content) {
		// 直接创建临时节点
		zkClient.createEphemeral(nodePath + "/" + serverName, content);
		System.out.println("创建临时节点：" + nodePath + "/" + serverName);
	}
	
	/**
	 * 
	 * @param nodePath
	 * @return
	 */
	public List<String> getServerList(String nodePath){
		// 拿到所有的子节点
		serviceList = zkClient.getChildren(nodePath);
		
		// 继续监听这个节点
		zkClient.subscribeChildChanges(nodePath, new IZkChildListener() {
			// 子节点发生变化，可以获取到变化
			@Override
			public void handleChildChange(String parentPath, List<String> currentChilds) throws Exception {
				// 获取到新的临时节点列表
				serviceList = currentChilds;
			}
		});
		return serviceList;
	} 
}
